package com.dragon.modules.yuegou.service.coupon;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dragon.common.web.PageRequest;
import com.dragon.modules.yuegou.entity.coupon.CouponTemplateEntity;
import com.dragon.modules.yuegou.model.coupon.Coupon;
import com.dragon.modules.yuegou.model.coupon.CouponTemplate;
import com.dragon.modules.yuegou.model.coupon.CouponTemplateRandom;
import com.dragon.modules.yuegou.model.product.Spu;
import com.dragon.modules.yuegou.query.coupon.CouponParkQuery;
import com.dragon.modules.yuegou.query.coupon.CouponTemplateQuery;

import java.math.BigDecimal;
import java.util.List;

/**
 * 优惠券模板 服务接口
 *
 * @author pbuilder generated
 * @date 2020-06-29 19:18:21
 * @version 2.0
 */
public interface CouponTemplateService extends IService<CouponTemplateEntity> {

	/**
	 * 优惠券模板详情（已放缓存）
	 */
	CouponTemplate detail(String couponTemplateId);

	/**
	 * 集团新增优惠券
	 */
	void createCouponTemplate(CouponParkQuery query);

	/**
	 * 查询商圈开启兑换小票的停车券
	 * 
	 * @param busdId
	 * @return
	 */
	CouponTemplate getOpenTicket(String busdId);

	/**
	 * 通过商品名称查询可赠送的停车券
	 * 
	 * @param title
	 * @return
	 */
	List<CouponTemplate> searchParkCoupon(String busdId,String title);

	/**
	 * 获取商品的可用券列表
	 * 
	 * @param spuId
	 *            商品ID
	 * @param status 是否为展示在商品详情中
	 * @return 可用券列表
	 */
	List<CouponTemplate> getSpuCashCouponList(String spuId,boolean status);
	
	/**
	 * 判断券模板是否可用于该商品
	 */
	boolean getScopeSpu(CouponTemplate couponTemplate, String spuId);

	/**
	 * 获取券的可用商品列表
	 * 
	 * @param couponTemplateId
	 *            模板ID
	 * @return 可用商品列表
	 */
	List<Spu> getCashCouponSpuList(String couponTemplateId);

	/**
	 * 获取商品的可用券数量
	 * 
	 * @param spuId
	 *            商品ID
	 * @return 可用券数量
	 */
	Integer getSpuCashCouponListNum(String spuId);
	
	/**
	 * 会员领取优惠券 未判断是否有资格领取
	 * 
	 * @param memberId
	 *            会员ID
	 * @param couponTemplateId
	 *            优惠券ID
	 * @return 优惠券优惠金额 只有随机券有返回
	 */
	BigDecimal receive(String memberId, String couponTemplateId);

	/**
	 * 会员领取优惠券 未判断是否有资格领取
	 *
	 * @param memberIdList
	 *            会员ID
	 * @param couponTemplateId
	 *            优惠券ID
	 * @return 优惠券优惠金额 只有随机券有返回
	 */
	List<Coupon> issueCoupon(List<String> memberIdList, String couponTemplateId,Integer num);

	/**
	 * 检查会员领取资格
	 * 
	 * @param memberId
	 *            会员ID
	 * @param couponTemplateId
	 *            券模板ID
	 * @return 是否有资格
	 */
	boolean verifyReceiveStatus(String memberId, String couponTemplateId);

	void updateRandom(CouponTemplateRandom random);

	/**
	 * 验证订单金额
	 */
	boolean verifyOrderCash(String couponTemplateId,BigDecimal orderFee);

	/**
	 * 清空模板缓存
	 * 
	 * @param couponTemplateId
	 *            券模板ID
	 */
	void evictCache(String couponTemplateId);

	/**
	 * @param couponTemplate 优惠劵信息
	 */
	void createCashCoupon(CouponTemplate couponTemplate);

	/**
	 * @param couponTemplate 优惠劵信息
	 */
	void editCashCoupon(CouponTemplate couponTemplate);

	/**
	 * @param id 模板ID
	 * @param status 优惠券状态 :0-下架;1-上架
	 */
	void editStatus(String id, Integer status);

	/**
	 * @param page 分页信息
	 * @param query 查询条件
	 * @return
	 */
	IPage<CouponTemplate> districtList(PageRequest page, CouponTemplateQuery query);

	/**
	 * @param query 查询条件
	 * @return
	 */
	List<CouponTemplate> searchList( CouponTemplateQuery query);

	/**
	 * @param id 优惠劵模板ID
	 * @return
	 */
	List<Spu> couponSpuList(String id,String busdId);

	IPage<Spu> searchPageSpu(PageRequest arg0, String couponTemplateId);

	List<Coupon> searchCouponByOrder(BigDecimal money, List<String> skuIds,String memberId,String busdId);

	/***
	 * 商品可用优惠券列表
	 * @param spuId
	 * @param status
	 * @return
	 */
	List<CouponTemplate> getSpuCashCouponShowList(String spuId, boolean status);

	/**
	 * @param id 模板Id
	 * @return
	 */
	List<Spu> couponSelectSpu(String id);
}